// 只读参数

function arraySum(arr: readonly number[]) {
  // arr[0] = 0 报错
  // todo
}

// void类型
function f(): void {
  console.log('Hello~');
}

function f1(): void {
  // return 123 // 报错
}

function f2(): void {
  return undefined // 返回 undefined 是允许的  因为 js 默认就是返回 undefined
}

function f3(): void {
  // return null 报错
}

type voidFunc = () => void

// 编译并不会报错
// TypeScript 认为，这里的 void 类型只是表示该函数的返回值没有利用价值
// 或者说不应该使用该函数的返回值
// 只要不用到这里的返回值，就不会报错
const f4: voidFunc = () => {
  return 123
}

// 如果后面使用了这个函数的返回值，就违反了约定，则会报错
// f4() * 2 算术运算左侧必须是 "any"、"number"、"bigint" 或枚举类型

// 如果是抛出错误，也允许将返回值写成void
function throwErr(): void {
  throw new Error('something error happened~')
}

let foo: void = undefined
// let bar: void = null 报错